// 初始数据 原数据
var obj = {
    name: 'test',
    main: {
      a: 1,
      b: 2
    },
    fn: function() {
  
    },
    friends: [1, 2, 3, [22, 33]]
  }
  function copy(obj) {
    // 声明一个变量来存储拷贝的数据
    let newObj = null;
    // 判断数据类型是否为复杂类型，是则调用自己，否则直接赋值
    // null不可以循环但是复杂类型
    if(typeof(obj) == 'object' && obj != null) {
      // 声明一个变量用来存储拷贝出来的值，根据参数的数据类型来存储
      newObj = obj instanceof Array ? [] : {};
      // 循环obj中的每一项，如果里面还有复杂类型，则利用递归再次调用copy函数
      for(var i in obj) {
        newObj[i] = copy(obj[i])
      }
    }else {
      newObj = obj
    }
    // 返回newObj
    return newObj
  }
  var obj2 = copy(obj);
  obj2.name = '修改成功'
  obj2.main.a = 100;
  obj2.main.b = 200;
  console.log(obj, obj2);